import { RoutesAlias } from '../routesAlias'
import { AppRouteRecord } from '@/types/router'
import { menus } from '@/menus'

// 先不使用modules内的路由，使用menus内的路由
// const modules: Recordable = import.meta.glob('./modules/**/*.ts', { eager: true })

const routeModuleList: AppRouteRecord[] = []

// Object.keys(modules).forEach((key) => {
//   const mod = modules[key].default || {}
//   const modList = Array.isArray(mod) ? [...mod] : [mod]
//   routeModuleList.push(...modList)
// })

const basicRoutes: AppRouteRecord[] = [
  {
    path: RoutesAlias.可视化,
    name: RoutesAlias.可视化,
    meta: {
      title: '可视化首页1',
      roles: ['70000'],
      isFullPage: true
    },
    component: '/keShiHua'
  }
]

// 将旧系统菜单转换为可用的路由菜单
function formatOldMenu(
  menu: Partial<(typeof menus)[keyof typeof menus][number]>,
  level,
  topModuleKey
): AppRouteRecord {
  const { path, title, auth, children, component } = menu
  const route: AppRouteRecord = {
    path: path!,
    name: path,
    // 默认使用path作为component
    // 如果有children，则一级菜单(目录)使用Home作为component (即布局容器)
    // 如果只有一级菜单,使用path
    component:
      component || (level === 1 && children && children.length ? RoutesAlias.Layout : path),
    // 自动重定向
    redirect: level === 1 ? { name: children?.[0]?.path } : undefined,
    meta: {
      title: title!,
      roles: auth,
      // 层级,记录是第几层
      // 暂时无用,先注释
      // level,
      // 记录顶级父模块的key
      topModuleKey
    },
    children: children ? children.map((v) => formatOldMenu(v, level + 1, topModuleKey)) : []
  }
  return route
}

const oldMenuRoutes: AppRouteRecord[] = Object.keys(menus).map((k) =>
  menus[k].flat().map((v) => formatOldMenu(v, 1, k))
)

/**
 * 菜单列表、异步路由
 *
 * 支持两种模式:
 * 前端静态配置 - 直接使用本文件中定义的路由配置
 * 后端动态配置 - 后端返回菜单数据，前端解析生成路由
 *
 * 菜单标题（title）:
 * 可以是 i18n 的 key，也可以是字符串，比如：'用户列表'
 *
 * RoutesAlias.Layout 指向的是布局组件，后端返回的菜单数据中，component 字段需要指向 /index/index
 * 路由元数据（meta）：异步路由在 asyncRoutes 中配置，静态路由在 staticRoutes 中配置
 */
export const asyncRoutes: AppRouteRecord[] = basicRoutes
  .concat(...routeModuleList)
  .concat(...oldMenuRoutes)
